home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib18.dsk / NIBBLE BROKER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  36KB  |  762 lines

  1. 1  REM  ********1.6.88********
  2. 2  REM  *   NIBBLE.BROKER    *
  3. 3  REM  * BY  MARK R. CRAVEN *
  4. 4  REM  * COPYRIGHT (C) 1984 *
  5. 5  REM  * BY MICROSPARC, INC *
  6. 6  REM  **********************
  7. 90  GOTO 190
  8. 100  REM  PRINT SCREEN
  9. 110  GOTO 130
  10. 120 II = I +39: FOR J = I TO II:A =  PEEK(J):A = A +(A <32) *192:A = A +(A <64) *128:A = A +(A <96) *64:A = A +(A <128) *64:A = A +(A <160) *64: PRINT  CHR$(A);: NEXT : PRINT  CHR$(13);: RETURN 
  11. 130  PRINT  CHR$(4)"PR#1": PRINT  CHR$(9)"80N"
  12. 140  FOR I = 1024 TO 1920  STEP 128: GOSUB 120: NEXT 
  13. 150  FOR I = 1064 TO 1960  STEP 128: GOSUB 120: NEXT 
  14. 160  FOR I = 1104 TO 2000  STEP 128: GOSUB 120: NEXT 
  15. 170  PRINT  CHR$(4)"PR#0": RETURN 
  16. 180  REM  INIT. VARIABLES
  17. 190 D$ =  CHR$(4)
  18. 200  GOSUB 7010
  19. 210  ONERR  GOTO 6530
  20. 220  DIM ST$(100): REM  STOCK NAME
  21. 230  DIM B$(100): REM  BUY PRICE
  22. 240  DIM BN$(100): REM  NUMBER BOUGHT
  23. 250  DIM BC$(100): REM  BUY COMMISSION
  24. 260  DIM SN$(100): REM  NUMBER SOLD
  25. 270  DIM S$(100): REM  SELL PRICE
  26. 280  DIM DB$(100): REM  DATE BOUGHT
  27. 290  DIM DS$(100): REM  DATE SOLD
  28. 300  DIM SC$(100): REM  SELL COMMISSION
  29. 310  DIM C%(20)
  30. 320  GOSUB 5090
  31. 330  TEXT : HOME : VTAB 8: INVERSE :X$ = "LOADING DATAFILE:": GOSUB 4890:X$ = FL$: PRINT : GOSUB 4890: NORMAL 
  32. 340  PRINT D$;"OPEN";FL$
  33. 350  PRINT D$;"READ";FL$
  34. 360  INPUT E
  35. 370  FOR I = 1 TO E
  36. 380  INPUT ST$(I): INPUT B$(I): INPUT BN$(I): INPUT BC$(I): INPUT DB$(I): INPUT DS$(I): INPUT SC$(I): INPUT SN$(I): INPUT S$(I)
  37. 390  IF AA = 1  THEN  PRINT D$"CLOSE": RETURN 
  38. 400  NEXT 
  39. 410  PRINT D$;"CLOSE";FL$
  40. 420  REM 
  41. 430  REM 
  42. 440  REM  ***************
  43. 450  REM  *             *
  44. 460  REM  *  MAIN MENU  *
  45. 470  REM  *             *
  46. 480  REM  ***************
  47. 490  REM 
  48. 500  TEXT : HOME :X$ = "* THE NIBBLE BROKER *": INVERSE : GOSUB 4890: NORMAL : PRINT : PRINT 
  49. 510  HTAB 6: PRINT "1) ADD A STOCK": HTAB 6: PRINT "2) LIST A STOCK": HTAB 6: PRINT "3) SELECT STOCK/IRA DATA FILE": HTAB 6: PRINT "4) EDIT/DELETE STOCK INFORMATION": HTAB 6: PRINT "5) LIST ALL STOCKS"
  50. 520  HTAB 6: PRINT "6) SEARCH STOCKS BY DATE/NAME": HTAB 6: PRINT "7) STATISTICS": HTAB 6: PRINT "8) EXIT WITHOUT SAVING CHANGES": HTAB 6: PRINT "9) NORMAL PROGRAM EXIT"
  51. 530  HTAB 1: VTAB 15: PRINT "ENTER YOUR SELECTION  ";: GET G$: POKE  -16368,0:M1 =  VAL(G$)
  52. 540  IF M1 <1  OR M1 >9  THEN  VTAB 15: GOTO 530
  53. 550  ON M1 GOSUB 640,1320,1610,1690,3080,3360,5310,4130,2610
  54. 560  TEXT : GOTO 500
  55. 570  REM 
  56. 580  REM  ***************
  57. 590  REM  *             *
  58. 600  REM  * ADD STOCK   *
  59. 610  REM  *             *
  60. 620  REM  ***************
  61. 630  REM 
  62. 640  HOME :X$ = "ADD STOCK RECORD": INVERSE : GOSUB 4890: NORMAL 
  63. 650  GOSUB 1230
  64. 660  INPUT "ENTER STOCK NAME ";ST1$
  65. 670  IF ST1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 660
  66. 680  IF ST1$ = "R"  THEN  RETURN 
  67. 690  FOR I = 1 TO E
  68. 700  IF  LEFT$(ST1$, LEN(ST1$)) =  LEFT$(ST$(I), LEN(ST1$))  THEN 720
  69. 710  NEXT I: GOTO 740
  70. 720  PRINT : PRINT "DUPLICATE STOCK"
  71. 730  PRINT "HIT ANY KEY TO CONTINUE ";: GET G$: RETURN 
  72. 740  INPUT "ENTER COST PER SHARE: $";B1$: IF B1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 740
  73. 750  IF B1$ = "R"  THEN  RETURN 
  74. 760  IF  VAL(B1$) < = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 740
  75. 770  INPUT "ENTER # OF SHARES BOUGHT: ";BN1$: IF BN1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 770
  76. 780  IF BN1$ = "R"  THEN  RETURN 
  77. 790  IF  VAL(BN1$) = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 770
  78. 800  INPUT "ENTER BUYING COMMISSION:  $";BC1$: IF BC1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 800
  79. 810  IF BC1$ = "R"  THEN  RETURN 
  80. 820  IF  LEFT$(BC1$,1) = "0"  THEN 840
  81. 830  IF  VAL(BC1$) = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 800
  82. 840  INPUT "DATE PURCHASED (MM/DD/YY): ";DB1$: IF DB1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 840
  83. 850  IF DB1$ = "R"  THEN  RETURN 
  84. 860  IF  LEN(DB1$) < >8  THEN 840
  85. 870  IF  MID$ (DB1$,3,1) = "/"  AND  MID$ (DB1$,6,1) = "/"  THEN 890
  86. 880  GOTO 840
  87. 890  PRINT "DATE SOLD (MM/DD/YY): ":CV =  PEEK(37): VTAB 22: INVERSE : PRINT "      ENTER '00/00/00' IF UNSOLD      ": NORMAL : VTAB CV: HTAB 23: INPUT "";DS1$: CALL  -958: IF DS1$ = ""  THEN  VTAB CV: HTAB 1: GOTO 890
  88. 900  IF DS1$ = DB1$  THEN 990
  89. 910  IF DS1$ = "00/00/00"  THEN SC1$ = "0.00":SN1$ = "0":S1$ = "0.00": PRINT : PRINT : PRINT "NO FURTHER ENTRIES REQUIRED": FOR K = 1 TO 500: NEXT : GOTO 1120
  90. 920  IF DS1$ = "R"  THEN  RETURN 
  91. 930  IF  LEN(DS1$) < >8  THEN 890
  92. 940  IF  MID$ (DS1$,3,1) < >"/"  AND  MID$ (DS1$,6,1) < >"/"  THEN 890
  93. 950  IF  VAL( RIGHT$(DS1$,2)) < VAL( RIGHT$(DB1$,2))  THEN 890
  94. 960  IF  VAL( RIGHT$(DS1$,2)) > VAL( RIGHT$(DB1$,2))  THEN 990
  95. 970  IF  VAL( LEFT$(DS1$,2)) < VAL( LEFT$(DB1$,2))  THEN 890
  96. 980  IF  VAL( LEFT$(DS1$,2)) =  VAL( LEFT$(DB1$,2))  AND  VAL( MID$ (DS1$,4,2)) < VAL( MID$ (DB1$,4,2))  THEN 890
  97. 990  PRINT "ENTER SELLING COMMISSION: $":CV =  PEEK(37): VTAB 22: FLASH : PRINT "       ENTER '0.00' IF UNSOLD          ": NORMAL : VTAB CV: HTAB 28: INPUT "";SC1$: CALL  -958: IF SC1$ = ""  THEN  VTAB CV: HTAB 1: GOTO 990
  98. 1000  IF SC1$ = "R"  THEN  RETURN 
  99. 1010  IF  LEFT$(SC1$,1) = "0"  THEN 1030
  100. 1020  IF  VAL(SC1$) = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 990
  101. 1030  INPUT "ENTER # OF SHARES SOLD: ";SN1$: IF SN1$ = ""  THEN  VTAB  PEEK(37): HTAB 1: GOTO 1030
  102. 1040  IF SN1$ = "R"  THEN  RETURN 
  103. 1050  IF  VAL(SN1$) > VAL(BN1$)  THEN  CALL 65338: VTAB  PEEK(37): HTAB 25: FLASH : PRINT "TOO MANY";: NORMAL : FOR J = 1 TO 1000: NEXT J: HTAB 25: PRINT "         ";: HTAB 1: GOTO 1030
  104. 1060  IF  LEFT$(SN1$,1) = "0"  THEN 1080
  105. 1070  IF  VAL(SN1$) = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 1030
  106. 1080  PRINT "SELLING PRICE PER SHARE: $":CV =  PEEK(37): VTAB 22: FLASH : PRINT "       ENTER '0.00' IF UNSOLD       ": NORMAL : VTAB CV: HTAB 27: INPUT "";S1$: CALL  -958: IF S1$ = ""  THEN  VTAB CV: HTAB 1: GOTO 1080
  107. 1090  IF S1$ = "R"  THEN  RETURN 
  108. 1100  IF  LEFT$(S1$,1) = "0"  THEN 1120
  109. 1110  IF  VAL(S1$) = 0  THEN  PRINT  CHR$(13): VTAB ( PEEK(37) -2): CALL  -958: GOTO 1080
  110. 1120 E = E +1:ST$(E) = ST1$
  111. 1130 B$(E) = B1$
  112. 1140 BN$(E) = BN1$
  113. 1150 BC$(E) = BC1$
  114. 1160 DB$(E) = DB1$
  115. 1170 DS$(E) = DS1$
  116. 1180 SC$(E) = SC1$
  117. 1190 SN$(E) = SN1$
  118. 1200 S$(E) = S1$
  119. 1210 EDIT = 1: REM  FLAG FOR DISK WRITE
  120. 1220  RETURN 
  121. 1230  POKE 35,23: VTAB 24: HTAB 1: PRINT "  ------- <R> TO RETURN TO MENU -------";: HTAB 1: VTAB 4
  122. 1240  RETURN 
  123. 1250  REM 
  124. 1260  REM  ***************
  125. 1270  REM  *             *
  126. 1280  REM  * LIST STOCK  *
  127. 1290  REM  *             *
  128. 1300  REM  ***************
  129. 1310  REM 
  130. 1320  GOSUB 6570: HOME :X$ = "LIST A STOCK DATA": INVERSE : GOSUB 4890: NORMAL 
  131. 1330  POKE 34,2
  132. 1340  VTAB 23: POKE 35,22: HTAB 1: PRINT "  ------ <RTN> TO RETURN TO MENU -------"
  133. 1350  VTAB 6
  134. 1360  PRINT : INPUT "ENTER STOCK NAME TO LIST ";ST1$
  135. 1370  IF ST1$ = ""  THEN  RETURN 
  136. 1380  GOSUB 4600: IF HIT = 0  THEN  RETURN : REM SEARCHFILE,IFNONE,BACKTOMENU
  137. 1390  HOME :X$ = ST$(I): INVERSE : GOSUB 4890: NORMAL : PRINT 
  138. 1400  VTAB 3: FOR AA = 0 TO 39: PRINT "-";: NEXT AA
  139. 1410  PRINT  TAB( 18)"BOUGHT"; TAB( 29)"SOLD": FOR AA = 0 TO 39: PRINT "-";: NEXT AA
  140. 1420  VTAB 7: PRINT  TAB( 2)"DATE"; TAB( 17)DB$(I); TAB( 27)DS$(I)
  141. 1430  PRINT : PRINT  TAB( 2)"# OF SHARES"; TAB( 19)BN$(I); TAB( 29)SN$(I)
  142. 1440  PRINT : PRINT  TAB( 2)"PRICE PER SHARE"; TAB( 19)B$(I); TAB( 29)S$(I)
  143. 1450  PRINT : PRINT  TAB( 2)"COMMISSION"; TAB( 19)BC$(I); TAB( 29)SC$(I)
  144. 1460  FOR AA = 0 TO 39: PRINT "-";: NEXT AA
  145. 1470  IF XY = 1  THEN XY = 0: RETURN : REM  FLAG FOR LIST IN EDIT MODE
  146. 1480  PRINT  TAB( 2)"TOTALS"; TAB( 17);"$"; TAB( 19) INT( VAL(BN$(I)) * VAL(B$(I)) + VAL(BC$(I))); TAB( 27)"$"; TAB( 29) INT( VAL(SN$(I)) * VAL(S$(I)) - VAL(SC$(I)))
  147. 1490  PRINT : PRINT "DO YOU WANT TO SEE THE STOCK'S YIELD?";: GET F$: PRINT : PRINT 
  148. 1500  IF F$ < >"N"  THEN  HTAB 1: VTAB  PEEK(37) -1: CALL  -868: GOSUB 4210
  149. 1510  PRINT : PRINT "HIT ANY KEY TO CONTINUE--'P' TO PRINT";: GET G$
  150. 1520  IF G$ = "P"  THEN  GOSUB 4990
  151. 1530  RETURN 
  152. 1540  REM 
  153. 1550  REM  ***************
  154. 1560  REM  *             *
  155. 1570  REM  *CHANGE D-FILE*
  156. 1580  REM  *             *
  157. 1590  REM  ***************
  158. 1600  REM 
  159. 1610  GOTO 320
  160. 1620  REM 
  161. 1630  REM  ***************
  162. 1640  REM  *             *
  163. 1650  REM  * EDIT STOCK  *
  164. 1660  REM  *             *
  165. 1670  REM  ***************
  166. 1680  REM 
  167. 1690  GOSUB 6570: HOME :X$ = "EDIT/DELETE STOCK INFORMATION": INVERSE : GOSUB 4890: NORMAL 
  168. 1700  VTAB 6: HTAB 10: PRINT "1) EDIT A STOCK": HTAB 10: PRINT "2) DELETE STOCK FROM THE FILE": PRINT : HTAB 10: PRINT "3) RETURN TO MAIN MENU": VTAB 20: HTAB 6: PRINT "ENTER YOUR CHOICE  ";: GET X$: POKE  -16368,0
  169. 1710  IF  VAL(X$) <1  OR  VAL(X$) >3  THEN 1700
  170. 1720  ON  VAL(X$) GOTO 1740,6830,1730
  171. 1730  POP : GOTO 500
  172. 1740  HOME :X$ = "EDIT STOCK INFORMATION": INVERSE : GOSUB 4890: NORMAL : HOME 
  173. 1750  VTAB 24: PRINT " ----'RETURN' TO EXIT TO MAIN MENU ----";: POKE 35,23: HTAB 1: VTAB 5
  174. 1760 XY = 1
  175. 1770  INPUT "STOCK NAME TO CHANGE: ";ST1$
  176. 1780  IF ST1$ = ""  THEN  RETURN 
  177. 1790  GOSUB 4600: IF HIT = 0  THEN  RETURN 
  178. 1800 I = C%(1)
  179. 1810  GOSUB 1390
  180. 1820  POKE 34,16: POKE 35,22: HOME 
  181. 1830 X$ = "          EDIT MODE          ": VTAB 23: GOSUB 4890: HOME 
  182. 1840  VTAB 24: PRINT "  'Y' TO CHANGE - 'RETURN' FOR NO CHANGE"
  183. 1850 X$ = "                               ": VTAB 1: GOSUB 4890:X$ = ST$(I): INVERSE : VTAB 1: GOSUB 4890: NORMAL : HOME 
  184. 1860  VTAB 17
  185. 1870  PRINT " CHANGE THE STOCK NAME? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 1920
  186. 1880  PRINT : INPUT "NEW STOCK NAME: ";ST$(I): IF ST$(I) = ""  THEN  VTAB  PEEK(37) -1: GOTO 1880
  187. 1890  REM 
  188. 1900 X$ = "                                ": VTAB 1: GOSUB 4890:X$ = ST$(I): INVERSE : VTAB 1: GOSUB 4890: NORMAL : HOME 
  189. 1910  PRINT "OLD COST PER SHARE: ";B$(I)
  190. 1920  PRINT "CHANGE THE COST PER SHARE? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 1970
  191. 1930  PRINT 
  192. 1940  INPUT "NEW COST PER SHARE: ";B$(I)
  193. 1950  IF  LEN(B$(I)) <1  THEN 1940
  194. 1960  VTAB 11: HTAB 19: PRINT B$(I);"    ": HOME 
  195. 1970  PRINT "OLD # OF SHARES BOUGHT: ";BN$(I)
  196. 1980  PRINT "CHANGE THE # OF SHARES? ";: GET Y$: IF Y$ <"Y"  THEN  HOME : GOTO 2030
  197. 1990  PRINT 
  198. 2000  INPUT "NEW # OF SHARES BOUGHT: ";BN$(I)
  199. 2010  IF  LEN(BN$(I)) <1  THEN 2000
  200. 2020  VTAB 9: HTAB 19: PRINT BN$(I);"   ": HOME 
  201. 2030  PRINT "OLD COMMISSION TO BUY: ";BC$(I)
  202. 2040  PRINT "CHANGE THE COMMISSION TO BUY? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 2090
  203. 2050  PRINT 
  204. 2060  INPUT "NEW COMMISSION TO BUY: ";BC$(I)
  205. 2070  IF  LEN(BC$(I)) <1  THEN  HOME : GOTO 2030
  206. 2080  VTAB 13: HTAB 19: PRINT BC$(I);"    ": HOME 
  207. 2090  PRINT "OLD DATE PURCHASED: ";DB$(I)
  208. 2100  PRINT "CHANGE THE DATE PURCHASED? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 2170
  209. 2110  PRINT 
  210. 2120  INPUT "NEW DATE PURCHASE TEXT : ";DB$(I)
  211. 2130  IF  LEN(DB$(I)) < >8  THEN  HOME : GOTO 2120
  212. 2140  IF  LEN(DB$(I)) = 8  AND  MID$ (DB$(I),3,1) = "/"  AND  MID$ (DB$(I),6,1) = "/"  THEN 2160
  213. 2150  HOME : GOTO 2100
  214. 2160  VTAB 7: HTAB 17: PRINT DB$(I): HOME 
  215. 2170  PRINT "OLD DATE SOLD     : ";DS$(I)
  216. 2180  PRINT "CHANGE OLD DATE SOLD? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 2250
  217. 2190  PRINT 
  218. 2200  INPUT "NEW DATE SOLD     : ";DS$(I)
  219. 2210  IF  LEN(DS$(I)) <1  THEN  HOME : GOTO 2170
  220. 2220  IF  LEN(DS$(I)) = 8  AND  MID$ (DS$(I),3,1) = "/"  AND  MID$ (DS$(I),6,1) = "/"  THEN 2240
  221. 2230  HOME : GOTO 2170
  222. 2240  VTAB 7: HTAB 27: PRINT DS$(I): HOME 
  223. 2250  IF DS$(I) = "00/00/00"  THEN  PRINT : PRINT "NO FURTHER ENTRIES REQUIRED": FOR K = 1 TO 1000: NEXT K: GOTO 2520
  224. 2260  IF  VAL( RIGHT$(DS$(I),2)) < VAL( RIGHT$(DB$(I),2))  THEN  GOSUB 2310: GOTO 2110
  225. 2270  IF  VAL( RIGHT$(DS$(I),2)) > VAL( RIGHT$(DB$(I),2))  THEN 2320
  226. 2280  IF  VAL( LEFT$(DS$(I),2)) < VAL( LEFT$(DB$(I),2))  THEN  GOSUB 2310: GOTO 2110
  227. 2290  IF  VAL( LEFT$(DS$(I),2)) =  VAL( LEFT$(DB$(I),2))  AND  VAL( MID$ (DS$(I),4,2)) < VAL( MID$ (DB$(I),4,2))  THEN  GOSUB 2310: GOTO 2110
  228. 2300  GOTO 2320
  229. 2310  HOME : CALL 65338: PRINT " INCORRECT DATES--ENTER AGAIN PLEASE": FOR J = 1 TO 1000: NEXT J: RETURN 
  230. 2320  PRINT "OLD SELL COMMISS. : ";SC$(I)
  231. 2330  PRINT "CHANGE THE SELL COMMISSION? ";: GET Y$: IF Y$ < >"Y"  THEN  HOME : GOTO 2380
  232. 2340  PRINT 
  233. 2350  INPUT "NEW SELL COMMISSION:  ";SC$(I)
  234. 2360  IF  LEN(SC$(I)) <1  THEN  HOME : GOTO 2260
  235. 2370  VTAB 13: HTAB 29: PRINT SC$(I);"    ": HOME 
  236. 2380  PRINT "OLD # SHARES SOLD  : ";SN$(I)
  237. 2390  PRINT "CHANGE # SHARES SOLD? ";: GET Y$: POKE  -16368,0: IF Y$ < >"Y"  THEN  HOME : GOTO 2450
  238. 2400  PRINT 
  239. 2410  INPUT "NEW # OF SHARES SOLD: ";SN$(I)
  240. 2420  IF  LEN(SN$(I)) <1  THEN  HOME : GOTO 2380
  241. 2430  IF  VAL(SN$(I)) > VAL(BN$(I))  THEN  CALL 65338: VTAB 9: HTAB 29: FLASH : PRINT "TOO MANY": NORMAL : FOR J = 1 TO 1000: NEXT J: VTAB 9: HTAB 29: PRINT "        ": HOME : GOTO 2380
  242. 2440  VTAB 9: HTAB 29: PRINT SN$(I);"    ": HOME 
  243. 2450  IF  VAL(SN$(I)) < VAL(BN$(I))  THEN  GOSUB 7110: GOTO 2380
  244. 2460  PRINT "CHANGE SELL PRICE?";: GET Y$: POKE  -16368,0: IF Y$ < >"Y"  THEN  HOME : GOTO 2500
  245. 2470  PRINT 
  246. 2480  INPUT "NEW SELLING PRICE : ";S$(I)
  247. 2490  IF  LEN(S$(I)) <1  THEN  HOME : GOTO 2450
  248. 2500  REM 
  249. 2510  VTAB 11: HTAB 29: PRINT S$(I);"      ": HOME 
  250. 2520 EDIT = 1: REM  FLAG FOR CHANGED DATA FILE
  251. 2530  FOR AA = 1 TO 1000: NEXT AA: TEXT : HOME : RETURN 
  252. 2540  REM 
  253. 2550  REM  ***************
  254. 2560  REM  *             *
  255. 2570  REM  * EXIT--DISK  *
  256. 2580  REM  *             *
  257. 2590  REM  ***************
  258. 2600  REM 
  259. 2610  GOSUB 6570: IF EDIT < >1  AND (M1 = 8  OR M1 = 9)  THEN  HOME : VTAB 9: HTAB 18: PRINT "EXIT": END : REM  NO CHANGE ---NO WRITE !
  260. 2620  IF ED = 0  THEN  RETURN : REM  NO NEED TO WRITE UNCHANGED FILE
  261. 2630  TEXT : HOME 
  262. 2640 D$ =  CHR$(4)
  263. 2650  PRINT : VTAB  PEEK(37): CALL  -868
  264. 2660  VTAB 6: HTAB 7
  265. 2670  PRINT "WRITING UPDATED ";FL$
  266. 2680  PRINT D$;"OPEN ";FL$
  267. 2685  PRINT D$;"CLOSE";FL$
  268. 2690  PRINT D$;"DELETE";FL$
  269. 2700  PRINT D$;"OPEN";FL$
  270. 2710  PRINT D$;"WRITE";FL$
  271. 2720  PRINT E
  272. 2730  FOR I = 1 TO E
  273. 2740  PRINT ST$(I): PRINT B$(I): PRINT BN$(I): PRINT BC$(I): PRINT DB$(I): PRINT DS$(I): PRINT SC$(I): PRINT SN$(I): PRINT S$(I)
  274. 2750  IF  RIGHT$(DS$(I),2) = "00"  THEN 2800
  275. 2760 ALLCST = ALLCST +( VAL(B$(I)) * VAL(BN$(I))) + VAL(BC$(I))
  276. 2770 COM = COM + VAL(BC$(I)) + VAL(SC$(I))
  277. 2780 SELCST = SELCST +( VAL(S$(I)) * VAL(SN$(I))) - VAL(SC$(I))
  278. 2790 NET = SELCST -ALLCST
  279. 2800  NEXT 
  280. 2810 EDIT = 0: REM  CLEAR EDIT FLAG
  281. 2820  PRINT D$;"CLOSE";FL$
  282. 2830  IF FL = 1  THEN  RETURN 
  283. 2840  TEXT : HOME : VTAB 4
  284. 2850 AA = 0
  285. 2860 X$ = "  THE BOTTOM LINE  ": INVERSE : GOSUB 4890: NORMAL : PRINT : PRINT : PRINT 
  286. 2870  PRINT "TOTAL COMMISSIONS  =$"; TAB( 29 - LEN( STR$( INT(COM)))); INT(COM)
  287. 2880  PRINT 
  288. 2890  PRINT "TOTAL SELLING NET  =$"; TAB( 29 - LEN( STR$( INT(SELCST)))); INT(SELCST)
  289. 2900  PRINT "TOTAL COSTS        =$"; TAB( 29 - LEN( STR$( INT(ALLCST)))); INT(ALLCST)
  290. 2910  HTAB 22: PRINT "-------"
  291. 2920  IF ALLCST < = 0  THEN  PRINT "NET PROFIT         =$"; TAB( 28)"0": GOTO 2950
  292. 2930 PERCENT = ((SELCST -ALLCST)/ALLCST) *100
  293. 2940  PRINT "NET PROFIT         =$"; TAB( 29 - LEN( STR$( INT(NET)))); INT(NET)
  294. 2950  PRINT : PRINT : PRINT : PRINT "PERCENT GAIN OR LOSS= "; INT(PER *100)/100;" %"
  295. 2960  PRINT : PRINT : PRINT 
  296. 2970  PRINT : PRINT "HIT 'R' TO RETURN TO MENU--'P' TO PRINT": PRINT : PRINT "ANY OTHER KEY TO END";: GET F$
  297. 2980  IF F$ = "R"  THEN 500
  298. 2990  IF F$ = "P"  THEN  GOSUB 4990: HOME : VTAB 12: GOTO 2970
  299. 3000  END 
  300. 3010  REM 
  301. 3020  REM  ***************
  302. 3030  REM  *             *
  303. 3040  REM  *  LIST ALL   *
  304. 3050  REM  *             *
  305. 3060  REM  ***************
  306. 3070  REM 
  307. 3080  GOSUB 6570:AA = 0: REM  INITIALIZE LISTING FLAG
  308. 3090  HOME 
  309. 3100  PRINT  TAB( 3)"*** STOCK NAMES ***"; TAB( 26)"YEAR"; TAB( 34)"YEAR"
  310. 3110  PRINT "  -------------------"; TAB( 25)"BOUGHT"; TAB( 34)"SOLD"
  311. 3120  POKE 34,3
  312. 3130  PRINT 
  313. 3140  FOR L = 99 TO 0  STEP  -1
  314. 3150  FOR K = 1 TO E
  315. 3160  IF  VAL( RIGHT$(DB$(K),2)) = L  THEN AA = AA +1: GOTO 3180
  316. 3170  GOTO 3240
  317. 3180  IF  MID$ (DS$(K),7,2) = "00"  THEN  PRINT  LEFT$(ST$(K),22); TAB( 26)"19"; RIGHT$(DB$(K),2); TAB( 35)"--": GOTO 3200
  318. 3190  PRINT  LEFT$(ST$(K),22); TAB( 26)"19"; RIGHT$(DB$(K),2); TAB( 34)"19"; RIGHT$(DS$(K),2)
  319. 3200  FOR J = 1 TO 5
  320. 3210  IF AA = J *16  THEN  PRINT : VTAB 21: PRINT "TYPE 'P' TO PRINT LISTING": PRINT "ANY OTHER KEY TO CONTINUE ";: POKE  -16368,0: GET Y$: PRINT : IF Y$ < >"P"  THEN  HOME 
  321. 3220  IF Y$ = "P"  THEN  VTAB  PEEK(37): HTAB 1: CALL  -958: GOSUB 4990: HOME :Y$ = ""
  322. 3230  NEXT J
  323. 3240  NEXT K
  324. 3250  NEXT L
  325. 3260  PRINT 
  326. 3270  GOSUB 1510: REM  PRINT OR CONTINUE?
  327. 3280  TEXT : HOME : RETURN 
  328. 3290  REM 
  329. 3300  REM  ***************
  330. 3310  REM  *             *
  331. 3320  REM  * SEARCH BY   *
  332. 3330  REM  * YEARS       *
  333. 3340  REM  ***************
  334. 3350  REM 
  335. 3360  GOSUB 6570: HOME : VTAB 3:X$ = "SEARCH STOCKS BY YEAR/NAME": INVERSE : GOSUB 4890: NORMAL 
  336. 3370  VTAB 7: CALL  -958: HTAB 1: PRINT "DO YOU WANT TO LIST STOCKS BY :"
  337. 3380  PRINT 
  338. 3390  PRINT "1)  YEAR OF PURCHASE"
  339. 3400  PRINT "2)  YEAR OF SALE"
  340. 3410  PRINT "3)  BOTH"
  341. 3420  PRINT "4)  BY NAME"
  342. 3430  PRINT 
  343. 3440  PRINT "5)  RETURN TO MENU"
  344. 3450  VTAB 7: HTAB 34
  345. 3460  GET F$: PRINT F$:M2 =  VAL(F$): IF M2 <1  OR M2 >5  THEN 3370
  346. 3470  ON M2 GOTO 3490,3690,3860,4040,3680
  347. 3480  GOTO 3380
  348. 3490  VTAB 6: CALL  -958: PRINT : INPUT "ENTER THE YEAR YOU WISH TO LIST :19";BB$
  349. 3500  HOME : PRINT "STOCK NAME     ";"BOUGHT  SOLD PROFIT YIELD"
  350. 3510  PRINT  TAB( 29)"(LOSS)"
  351. 3520  FOR J = 1 TO 40: PRINT "-";: NEXT J
  352. 3530  FOR I = 1 TO E
  353. 3540  IF  RIGHT$(DB$(I),2) =  RIGHT$(BB$,2)  THEN WW = 1: GOSUB 4210
  354. 3550  IF WW < >1  THEN 3600
  355. 3560  IF  RIGHT$(DS$(I),2) = "00"  THEN  PRINT  LEFT$(ST$(I),15) TAB( 19) RIGHT$(DB$(I),2) TAB( 25)"--"; TAB( 31)"----" TAB( 36)"----": GOTO 3600
  356. 3570  PRINT  LEFT$(ST$(I),15) TAB( 19) RIGHT$(DB$(I),2) TAB( 25) RIGHT$(DS$(I),2);
  357. 3580  PRINT  TAB( 28) CHR$(36) TAB( 34 - LEN( STR$( INT(CG)))) INT(CG) TAB( 39 - LEN( STR$( INT(CT)))) INT(CT) TAB( 40) CHR$(37);
  358. 3590 CY = CY +CG
  359. 3600 WW = 0: NEXT I
  360. 3610  PRINT  TAB( 28)"-------"
  361. 3620  IF ST = 1  THEN 4110
  362. 3630  PRINT : PRINT "  NET FOR THE YEAR 19"; RIGHT$(BB$,2);" = $ ";CY
  363. 3640 CY = 0: PRINT 
  364. 3650  PRINT : PRINT "HIT 'P' TO PRINT--ANY OTHER TO CONTINUE";: GET F$: POKE  -16368,0
  365. 3660  IF F$ = "P"  THEN  GOSUB 4990
  366. 3670  TEXT : HOME : GOTO 3360
  367. 3680 WW = 0: RETURN 
  368. 3690  VTAB 5: CALL  -958: PRINT : INPUT "ENTER THE YEAR YOU WISH TO LIST :19";BB$
  369. 3700  HOME : PRINT "STOCK NAME     ";"BOUGHT  SOLD PROFIT YIELD"
  370. 3710  PRINT  TAB( 29)"(LOSS)"
  371. 3720  FOR J = 1 TO 40: PRINT "-";: NEXT J
  372. 3730  FOR I = 1 TO E
  373. 3740  IF  RIGHT$(DS$(I),2) =  RIGHT$(BB$,2)  THEN WW = 1: GOSUB 4210
  374. 3750  IF WW < >1  THEN 3790
  375. 3760  PRINT  LEFT$(ST$(I),15) TAB( 19) RIGHT$(DB$(I),2) TAB( 25) RIGHT$(DS$(I),2);
  376. 3770  PRINT  TAB( 28) CHR$(36) TAB( 34 - LEN( STR$( INT(CG)))) INT(CG) TAB( 39 - LEN( STR$( INT(CT)))) INT(CT) TAB( 40) CHR$(37);
  377. 3780 CY = CY +CG
  378. 3790 WW = 0: NEXT I
  379. 3800  PRINT  TAB( 28)"-------"
  380. 3810  PRINT : PRINT " NET FOR THE YEAR 19"; RIGHT$(BB$,2);"  =  $ ";CY
  381. 3820 CY = 0: PRINT 
  382. 3830  PRINT "HIT 'P' TO PRINT--ANY OTHER TO CONTINUE";: GET F$
  383. 3840  IF F$ = "P"  THEN  GOSUB 4990
  384. 3850  TEXT : HOME : GOTO 3360
  385. 3860  VTAB 5: CALL  -958: PRINT : INPUT "ENTER THE YEAR OF THE PURCHASE :19";AA$: INPUT "ENTER THE YEAR OF THE SALE :19";BB$
  386. 3870  HOME : PRINT "STOCK NAME     ";"BOUGHT  SOLD PROFIT YIELD"
  387. 3880  PRINT  TAB( 29)"(LOSS)"
  388. 3890  FOR J = 1 TO 40: PRINT "-";: NEXT J
  389. 3900  FOR I = 1 TO E
  390. 3910  IF ( RIGHT$(DB$(I),2) =  RIGHT$(AA$,2)  AND  RIGHT$(DS$(I),2) =  RIGHT$(BB$,2))  THEN WW = 1: GOSUB 4210
  391. 3920  IF WW < >1  THEN 3960
  392. 3930  PRINT  LEFT$(ST$(I),15) TAB( 19) RIGHT$(DB$(I),2) TAB( 25) RIGHT$(DS$(I),2);
  393. 3940  PRINT  TAB( 28) CHR$(36) TAB( 34 - LEN( STR$( INT(CG)))) INT(CG) TAB( 39 - LEN( STR$( INT(CT)))) INT(CT) TAB( 40) CHR$(37);
  394. 3950 CY = CY +CG
  395. 3960 WW = 0: NEXT I
  396. 3970  PRINT  TAB( 28)"-------"
  397. 3980  PRINT : PRINT "  NET FOR THE YEAR 19"; RIGHT$(BB$,2);"  = $  ";CY
  398. 3990 CY = 0: PRINT 
  399. 4000  PRINT 
  400. 4010  PRINT "HIT 'P' TO PRINT--ANY OTHER TO CONTINUE";: GET F$
  401. 4020  IF F$ = "P"  THEN  GOSUB 4990
  402. 4030  TEXT : HOME : GOTO 3360
  403. 4040  TEXT : HOME :X$ = "SEARCH BY STOCK NAME": INVERSE : GOSUB 4890: NORMAL 
  404. 4050  VTAB 6: PRINT : INPUT "ENTER STOCK NAME TO LIST ";ST1$: IF ST1$ = ""  THEN 4050
  405. 4060  HOME : PRINT "STOCK NAME    ";"BOUGHT  SOLD PROFIT YIELD": PRINT  TAB( 28)"(LOSS)": FOR J = 1 TO 40: PRINT "-";: NEXT J
  406. 4070  FOR I = 1 TO E: IF  LEFT$(ST1$, LEN(ST1$)) =  LEFT$(ST$(I), LEN(ST1$))  THEN 4100
  407. 4080  NEXT I: GOTO 4110
  408. 4090  REM 
  409. 4100 WW = 1: GOSUB 4210:ST = 1: GOTO 3560
  410. 4110  PRINT : PRINT "  NET FOR '";ST1$;"'= $ ";CY
  411. 4120  GOTO 3640
  412. 4130  INPUT "QUIT? (Y/N)";G$: IF G$ < >"Y"  THEN 500
  413. 4140  END 
  414. 4150  REM  ***************
  415. 4160  REM  *             *
  416. 4170  REM  *    YIELDS   *
  417. 4180  REM  *             *
  418. 4190  REM  ***************
  419. 4200  REM 
  420. 4210 CT = 0:CG = 0:CE = 0:B2 = 0:S2 = 0
  421. 4220  IF DS$(I) = DB$(I)  AND WW = 1  THEN 4240
  422. 4230  IF DS$(I) = DB$(I)  THEN  PRINT : PRINT "BOUGHT/SOLD SAME DAY--% INDETERMINATE"
  423. 4240 YRSELL =  VAL( RIGHT$(DS$(I),2))
  424. 4250 YEBOT =  VAL( RIGHT$(DB$(I),2))
  425. 4260 MTHBOT =  VAL( LEFT$(DB$(I),2))
  426. 4270 MOSOLD =  VAL( LEFT$(DS$(I),2))
  427. 4280 DABOT =  VAL( MID$ (DB$(I),4,2))
  428. 4290 DYSLD =  VAL( MID$ (DS$(I),4,2))
  429. 4300 DZ = DYSLD -DABOT
  430. 4310  IF DZ <0  THEN DYSLD = 30 +DYSLD:MOSOLD = MOSOLD -1: GOTO 4300
  431. 4320 MUUNS = MOSOLD -MTHBOT
  432. 4330  IF MUUNS <0  THEN MOSOLD = MOSOLD +12:YRSELL = YRSELL -1: GOTO 4320
  433. 4340 YZ = YRSELL -YEBOT
  434. 4350 TITLE = 365 *YZ +30 *MUUNS +DZ
  435. 4360 S2 =  VAL(S$(I)) * VAL(SN$(I)) - VAL(SC$(I))
  436. 4370 B2 =  VAL(B$(I)) * VAL(BN$(I)) + VAL(BC$(I))
  437. 4380  IF DS$(I) = DB$(I)  AND WW = 1  THEN 4410
  438. 4390  IF DS$(I) = DB$(I)  THEN 4470
  439. 4400 CENT = 100 *365 *(S2 -B2)/(B2 *TITLE)
  440. 4410 CG =  INT((S2 -B2) *100)/100
  441. 4420 CT = ( INT(CENT *100)/100)
  442. 4430  IF WW = 1  THEN  RETURN 
  443. 4440  IF  RIGHT$(DS$(I),2) = "00"  THEN  PRINT : PRINT "STOCK NOT SOLD--NO YIELD AVAILABLE": RETURN 
  444. 4450  IF WW = 1  THEN  RETURN 
  445. 4460  PRINT : PRINT "ANNUAL PERCENT GAIN OR LOSS = ";CT;" %"
  446. 4470  PRINT : PRINT "ON A PROFIT (OR LOSS) OF $ "; INT((S2 -B2) *100)/100
  447. 4480  PRINT : PRINT "STOCK HELD ";YZ;" YEARS  ";MUUNS;" MONTHS   ";DZ;" DAYS"
  448. 4490  RETURN 
  449. 4530  REM 
  450. 4540  REM  ***************
  451. 4550  REM  *             *
  452. 4560  REM  * SEARCH FOR  *
  453. 4570  REM  * NAME        *
  454. 4580  REM  ***************
  455. 4590  REM 
  456. 4600  TEXT : VTAB 3: CALL  -958:A$ = ST1$
  457. 4610 K = 0:L =  LEN(A$):B$ = " "
  458. 4620  IF A$ = ""  THEN  RETURN 
  459. 4630  FOR II = 1 TO E
  460. 4640  IF A$ =  LEFT$(ST$(II),L)  THEN K = K +1:C%(K) = II
  461. 4650  IF K >10  THEN  GOSUB 4710: IF B$ = ""  THEN HIT = 0: RETURN 
  462. 4660  NEXT 
  463. 4670  IF K = 0  THEN HIT = 0: PRINT ST1$;"   < NOT FOUND >": FOR AA = 1 TO 1000: NEXT AA: RETURN 
  464. 4680  IF K = 1  THEN  PRINT :HIT = C%(1):I = C%(1): RETURN 
  465. 4690  GOSUB 4710: IF B$ = ""  THEN HIT = 0: RETURN 
  466. 4700  GOTO 4680
  467. 4710  REM 
  468. 4720 C2% = 0: IF K = 11  THEN K = 10:C2% = 1
  469. 4730  PRINT 
  470. 4740  FOR J = 1 TO K
  471. 4750  PRINT J;") ";ST$(C%(J))
  472. 4760  NEXT 
  473. 4770  VTAB J +9: PRINT "< 1-";K;" OR 'RETURN'";: IF C2% = 1  THEN  PRINT " OR C(ONTINUE)";
  474. 4780  INPUT " > ";B$: IF B$ = ""  THEN  RETURN 
  475. 4790  IF C2% = 1  AND B$ = "C"  THEN K = 1:C%(1) = C%(11): RETURN 
  476. 4800 B% =  VAL(B$): IF B% <1  OR B% >K  THEN  PRINT  CHR$(7);: GOTO 4770
  477. 4810 K = 1:C%(1) = C%(B%):I = C%(B%): RETURN 
  478. 4820  REM 
  479. 4830  REM  ***************
  480. 4840  REM  *             *
  481. 4850  REM  *PRT HEADINGS *
  482. 4860  REM  *             *
  483. 4870  REM  ***************
  484. 4880  REM 
  485. 4890  HTAB 20 - LEN(X$)/2
  486. 4900  PRINT X$
  487. 4910  RETURN 
  488. 4920  REM 
  489. 4930  REM  ***************
  490. 4940  REM  *             *
  491. 4950  REM  *   PRINTER   *
  492. 4960  REM  *             *
  493. 4970  REM  ***************
  494. 4980  REM 
  495. 4990  PRINT 
  496. 5000  VTAB  PEEK(37) -1: CALL  -958
  497. 5010  GOSUB 110: PRINT : RETURN 
  498. 5020  REM 
  499. 5030  REM  ***************
  500. 5040  REM  *             *
  501. 5050  REM  *FILE OPTIONS *
  502. 5060  REM  *             *
  503. 5070  REM  ***************
  504. 5080  REM 
  505. 5090  TEXT : HOME 
  506. 5100 X$ = "DATA FILE OPTIONS"
  507. 5110  VTAB 4: INVERSE : GOSUB 4890: NORMAL 
  508. 5120  VTAB 8: PRINT "CHOOSE ONE OPTION"
  509. 5130  VTAB 10: HTAB 6: PRINT "1) INVESTMENT STOCKS PORTFOLIO"
  510. 5140  HTAB 6: PRINT "2) IRA STOCK PORTFOLIO"
  511. 5150  IF FL$ < >""  THEN  HTAB 6: PRINT "3) NO CHANGE--RETURN TO MENU  "
  512. 5160  VTAB 8: HTAB 20
  513. 5170  GET M1$:M3 =  VAL(M1$): IF M3 <1  OR M3 >3  THEN 5160
  514. 5180  IF M3 = 1  AND E < >0  THEN FL = 1: GOSUB 2610:FL = 0:FL$ = "STOCKFILE":M3 = 0: RETURN 
  515. 5190  IF M3 = 1  AND E = 0  THEN FL = 0:FL$ = "STOCKFILE": RETURN 
  516. 5200  IF M3 = 2  AND E < >0  THEN FL = 1: GOSUB 2610:FL = 0:FL$ = "IRA.FILE":M3 = 0: RETURN 
  517. 5210  IF M3 = 2  AND E = 0  THEN FL = 0:FL$ = "IRA.FILE": RETURN 
  518. 5220  IF M3 = 3  AND FL$ < >""  THEN  POP : GOTO 500
  519. 5230  GOTO 5090
  520. 5240  REM 
  521. 5250  REM  ******************
  522. 5260  REM  ***            ***
  523. 5270  REM  *** STATISTICS ***
  524. 5280  REM  ***            ***
  525. 5290  REM  ******************
  526. 5300  REM 
  527. 5310  GOSUB 6570
  528. 5320  POP : REM  CLEAR GOSUB FROM MAIN MENU
  529. 5330  HOME :X$ = "STATISTICS MENU": GOSUB 4890
  530. 5340  VTAB 5: PRINT "1) PER TRANSACTION INFORMATION"
  531. 5350  PRINT "2) CURRENTLY ACTIVE STOCKS (NOT SOLD)"
  532. 5360  PRINT "3) PROFIT/LOSS BY YEAR"
  533. 5370  PRINT 
  534. 5380  PRINT "4) RETURN TO MAIN MENU"
  535. 5390  HTAB 1: VTAB 23: PRINT "CHOOSE A NUMBER: ";: GET Y$: IF  VAL(Y$) <1  OR  VAL(Y$) >4  THEN 5390
  536. 5400  PRINT Y$: ON  VAL(Y$) GOTO 5410,5740,5850,6150
  537. 5410  TEXT : HOME :X$ = "PER TRANSACTION DATA": INVERSE : GOSUB 4890: NORMAL : PRINT 
  538. 5420 A0 = 0:A1 = 0:A2 = 0:A3 = 0:A4 = 0:A5 = 0:BN = 0:SN = 0
  539. 5430  PRINT "THERE HAVE BEEN "; CHR$(91);E; CHR$(93);" TRANSACTIONS."
  540. 5440  PRINT 
  541. 5450  REM  AVERAGE COST PER TRANSACTION
  542. 5460  FOR I = 1 TO E
  543. 5470 A1 = A1 +( VAL(B$(I)) * VAL(BN$(I))) + VAL(BC$(I))
  544. 5480  NEXT I: IF E <1  THEN 5710
  545. 5490  PRINT "AVERAGE COST PER TRANSACTION IS $ "; INT(A1/E)
  546. 5500  REM  AVERAGE COMMISSIONS
  547. 5510  FOR I = 1 TO E
  548. 5520 A2 = A2 + VAL(BC$(I)) + VAL(SC$(I))
  549. 5530  NEXT I
  550. 5540  PRINT "AVERAGE COST OF COMMISSIONS IS $ "; INT(A2/E)
  551. 5550  REM  AVERAGE SALE AND PROFITS (LOSSES)
  552. 5560  FOR I = 1 TO E: IF  RIGHT$(DS$(I),2) = "00"  THEN 5600
  553. 5570 A3 = A3 + VAL(B$(I)) * VAL(BN$(I)) + VAL(BC$(I))
  554. 5580 A0 = A0 +1
  555. 5590 A4 = A4 + VAL(S$(I)) * VAL(SN$(I)) - VAL(SC$(I))
  556. 5600  NEXT I: IF A0 = 0  THEN  PRINT "AVERAGE PROFIT (LOSS) IS $ *****": GOTO 5620
  557. 5610  PRINT "AVERAGE PROFIT (LOSS) IS $ "; INT((A4 -A3)/A0)
  558. 5620  REM  TOTAL SHARES PURCHASED ***
  559. 5630  FOR I = 1 TO E
  560. 5640 BN = BN + VAL(BN$(I)): NEXT 
  561. 5650  PRINT "TOTAL SHARES BOUGHT = ";BN
  562. 5660  FOR I = 1 TO E:SN = SN + VAL(SN$(I)): NEXT I: PRINT "TOTAL SHARES SOLD = ";SN
  563. 5670  PRINT "ACTIVE SHARES =";BN -SN
  564. 5680  PRINT "AVERAGE SHARES/TRANSACTION IS "; INT(BN/E)
  565. 5690  REM  AVG COST / SHARE
  566. 5700  PRINT "AVERAGE COST PER SHARE = $ "; INT(100 *(A1/BN))/100
  567. 5710  PRINT : PRINT : PRINT "PRESS ANY KEY TO CONTINUE, 'P' TO PRINT";
  568. 5720  GET Y$: IF Y$ = "P"  THEN  GOSUB 4990
  569. 5730  GOTO 5330: REM  BACK TO STATS MENU, PLEASE
  570. 5740  PRINT  CHR$(0): REM  CURRENT STOCKS UNSOLDD
  571. 5750  HOME :X$ = "STATISTICS OPTION 2": INVERSE : GOSUB 4890: NORMAL 
  572. 5760 X$ = "STOCKS NOT YET SOLD": INVERSE : GOSUB 4890: NORMAL : PRINT : PRINT 
  573. 5770  PRINT : PRINT "STOCK NAME                   DATE BOUGHT"
  574. 5780 K = 1: POKE 34,6: VTAB 8: HTAB 1
  575. 5790  FOR I = 1 TO E: IF  RIGHT$(DS$(I),2) = "00"  THEN  PRINT K; CHR$(93);" ";ST$(I); TAB( 34) LEFT$(DB$(I),2);"/"; RIGHT$(DB$(I),2):K = K +1
  576. 5795  IF  INT(I/15) = I/15  THEN  PRINT : PRINT "TYPE 'P' TO PRINT LISTING": PRINT "ANY OTHER KEY TO CONTINUE";: POKE  -16368,0: GET Y$: PRINT ;: IF Y$ < >"P"  THEN  HOME 
  577. 5798  IF Y$ = "P"  THEN  VTAB  PEEK(37): HTAB 1: CALL  -958: GOSUB 4990: HOME :Y$ = ""
  578. 5800  NEXT I
  579. 5810  PRINT : PRINT 
  580. 5820  PRINT "HIT 'P' TO PRINT--ANY OTHER TO CONTINUE";: GET F$
  581. 5830  IF F$ = "P"  THEN  GOSUB 4990
  582. 5840  TEXT : GOTO 5330: REM  BACK TO STATS MENU, PLEASE
  583. 5850  PRINT  CHR$(0): REM  P/L BY YEARS
  584. 5860  HOME 
  585. 5870 II = 1: REM  INITIALIZE GRAPHICS ARRAY COUNTER  --> II=1='1977"
  586. 5880  REM  **************
  587. 5890  REM  ** OPTION 3 **
  588. 5900  REM  **************
  589. 5910  REM 
  590. 5920 X$ = "YEARLY PROFIT/LOSS": INVERSE : GOSUB 4890: NORMAL : PRINT : PRINT 
  591. 5930  FOR I = 0 TO 9:SUM(I) = 0: NEXT I: GOSUB 6720
  592. 5940  PRINT "YEAR          PROFIT/LOSS      # SHARES"
  593. 5950  PRINT  TAB( 33)"TRADED": PRINT 
  594. 5960  FOR I = 1 TO 40: PRINT  CHR$(95);: NEXT I: PRINT 
  595. 5970  FOR I = EY -8 TO EY:II = II +1: REM  COUNTER FOR GRAPHICS ARRAY
  596. 5980 A0 = 0:A3 = 0:A4 = 0:SUM = 0:SALES = 0
  597. 5990  FOR K = 1 TO E
  598. 6000  IF  VAL( RIGHT$(DS$(K),2)) = I  THEN  GOSUB 6040
  599. 6010  NEXT K
  600. 6020  PRINT "19";I;".........$"; TAB( 21 -( LEN( STR$( INT(SUM))))); INT(SUM *100)/100; TAB( 38 - LEN( STR$(SALES)));SALES
  601. 6030  NEXT I: GOTO 6110
  602. 6040 A3 =  VAL(B$(K)) * VAL(BN$(K)) + VAL(BC$(K))
  603. 6050 SALES = SALES + VAL(SN$(K))
  604. 6060 A4 =  VAL(S$(K)) * VAL(SN$(K)) - VAL(SC$(K))
  605. 6070 SUM = SUM +A4 -A3:SUM(II) = SUM: REM  SUM(K) FOR GRAPHICS DISPLAY
  606. 6080  IF  ABS(SUM(II)) >HI  THEN HI =  ABS(SUM(II))
  607. 6090  IF  ABS(SUM(II)) <LO  THEN LO =  ABS(SUM(II))
  608. 6100  RETURN 
  609. 6110  PRINT : PRINT "<G> FOR GRAPHIC DISPLAY--<P> TO PRINT ": PRINT "ANY OTHER KEY TO CONTINUE";: GET Y$
  610. 6120  IF Y$ = "G"  THEN  GOSUB 6160
  611. 6130  IF Y$ = "P"  THEN  GOSUB 4990
  612. 6140  HOME : TEXT : GOTO 5330: REM  BACK TO STATS MENU, PLEASE
  613. 6150  GOTO 500: REM  BACK TO MAIN MENU, PLEASE
  614. 6160  PRINT  CHR$(0)
  615. 6170  REM 
  616. 6180  REM  ***************
  617. 6190  REM  *             *
  618. 6200  REM  *   GRAPHICS  *
  619. 6210  REM  *             *
  620. 6220  REM  ***************
  621. 6230  REM 
  622. 6240  REM  SET UP MAIN DISPLAY
  623. 6250  TEXT : HOME : GR 
  624. 6260 H = 2:V = 38
  625. 6270  COLOR= 3
  626. 6280  VLIN 0,V AT H
  627. 6290  VLIN 0,V AT H +37
  628. 6300  HLIN H,V +1 AT V
  629. 6310  COLOR= 2
  630. 6320  FOR TIC = V -2 TO 0  STEP  -2
  631. 6330  PLOT H -1,TIC: PLOT H +36,TIC: NEXT TIC
  632. 6340  GOSUB 6790: REM  CHANGEABLE VALUE
  633. 6350  VTAB 21
  634. 6360  FOR I = 1 TO 9: PRINT  TAB( H -3 +4 *I);"'";EY -9 +I;: NEXT I: PRINT  CHR$(13); CHR$(10);
  635. 6370  VTAB 22: PRINT  TAB( 14);"EACH TIC MARK = $";TIC *2
  636. 6380  POKE 34,23: HOME 
  637. 6390 VH = 38: REM  VERTICAL HEIGHT
  638. 6400  FOR I = 1 TO 9
  639. 6410 PL(I) =  INT(SUM(I +1)/TIC)
  640. 6420  FOR J = 1 TO 2: REM  WIDTH OF BAR
  641. 6430  IF  SGN(PL(I) -1) =  -1  THEN  COLOR= 11: REM PINKFOR'INTHERED'
  642. 6440  VLIN V,VH - ABS(PL(I)) AT 4 *I +1 -J
  643. 6450  COLOR= 2: REM  DARK BLUE
  644. 6460  NEXT J
  645. 6470  NEXT I
  646. 6480 H = 2:V = 38: HLIN H,V +1 AT V
  647. 6490  VTAB 23
  648. 6500  PRINT "PRESS ANY KEY TO CONTINUE, 'P' TO PRINT.";: POKE  -16368,0: GET Y$: IF Y$ = "P"  THEN  POKE 9,0: VTAB  PEEK(37): CALL  -958: GOSUB 5010: POKE 9,1
  649. 6510 Y$ = "": REM  CLEAR Y$
  650. 6520  RETURN 
  651. 6530  REM  ERROR TRAP
  652. 6540  IF  PEEK(222) = 5  THEN  PRINT D$;"CLOSE": GOTO 7450
  653. 6550  TEXT : HOME : PRINT  CHR$(7): PRINT "ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256
  654. 6560  PRINT : PRINT : PRINT "PRESS ANY KEY TO RETURN TO THE MENU.": GET G$: POKE  -16368,0: GOTO 500
  655. 6570  IF E < >0  THEN  RETURN 
  656. 6580  CALL 65338: CALL 65338
  657. 6590  TEXT : HOME : VTAB 5:X$ = "THERE IS NO DATA IN THE FILE": GOSUB 4890: PRINT :X$ = "YOU MUST ADD A STOCK TO CREATE DATA": GOSUB 4890
  658. 6600  PRINT :X$ = "OR READ IN A DATA FILE WITH OPTION 3": GOSUB 4890
  659. 6610  POP : VTAB 20: HTAB 1:X$ = "PRESS ANY KEY TO CONTINUE  ": GOSUB 4890: VTAB 20: HTAB 32: GET X$: POKE  -16368,0: GOTO 500
  660. 6620  REM 
  661. 6630  REM  **************
  662. 6640  REM  *            *
  663. 6650  REM  * CALCULATE  *
  664. 6660  REM  * MOST RECENT*
  665. 6670  REM  *  YEAR  AND *
  666. 6680  REM  * SCALE FAC. *
  667. 6690  REM  *            *
  668. 6700  REM  **************
  669. 6710  REM 
  670. 6720 EY = 0:LO = 0:HI = 0
  671. 6730  FOR I = 0 TO E
  672. 6740  IF  VAL( RIGHT$(DS$(I),2)) >EY  THEN EY =  VAL( RIGHT$(DS$(I),2))
  673. 6750  NEXT I: IF EY < >0  THEN  RETURN 
  674. 6760  FOR I = 0 TO E: IF  VAL( RIGHT$(DB$(I),2)) >EY  THEN EY =  VAL( RIGHT$(DB$(I),2))
  675. 6770  NEXT I
  676. 6780  RETURN 
  677. 6790 DF = HI -LO:SC =  INT(DF/38): FOR I = 1 TO 20: IF  INT(SC/50) = I  THEN 6820
  678. 6800  NEXT 
  679. 6810 TIC = 50: RETURN 
  680. 6820 TIC = (I +1) *50: RETURN 
  681. 6830  TEXT : HOME :X$ = "DELETE A STOCK FROM THE FILE": INVERSE : GOSUB 4890: NORMAL 
  682. 6840 X$ = "** <RTN> FOR EDIT/DELETE MENU **": VTAB 23: GOSUB 4890: POKE 35,22
  683. 6850  VTAB 6: INPUT "NAME OF STOCK TO DELETE--> ";ST1$
  684. 6860  IF ST1$ = ""  THEN  TEXT : GOTO 1690
  685. 6870  GOSUB 4600: REM  SEARCH FOR NAME OF STOCK
  686. 6880  IF HIT = 0  THEN  VTAB 4: CALL  -958: VTAB 7:X$ = "NO SUCH STOCK IN FILE": VTAB 6: GOSUB 4890: VTAB 22: HTAB 1: PRINT "PRESS ANY KEY TO CONTINUE  ";: GET X$: POKE  -16368,0: HOME : GOTO 1690
  687. 6890  IF HIT = 1  THEN C%(J) = I
  688. 6900  HOME : VTAB 10: HTAB 1: PRINT ST$(C%(K))
  689. 6910  VTAB 12: HTAB 1: PRINT "CORRECT NAME? (Y/N) ";: INPUT " ";X$
  690. 6920  IF X$ < >"Y"  THEN  HOME : GOTO 6840
  691. 6930  IF C%(J) = E  THEN 6970
  692. 6940  FOR I = C%(K) TO E
  693. 6950 ST$(I) = ST$(I +1):B$(I) = B$(I +1):BN$(I) = BN$(I +1):BC$(I) = BC$(I +1):DB$(I) = DB$(I +1):DS$(I) = DS$(I +1):SC$(I) = SC$(I +1):SN$(I) = SN$(I +1):S$(I) = S$(I +1)
  694. 6960  NEXT I
  695. 6970 E = E -1
  696. 6980 EDIT = 1: REM  FLAG FOR DISK WRITE
  697. 6990  TEXT : HOME : VTAB 6: HTAB 13: FLASH : PRINT "DELETING RECORD": NORMAL 
  698. 7000  FOR I = 1 TO 1000: NEXT : RETURN 
  699. 7010  TEXT : HOME 
  700. 7020  VTAB 3: FOR I = 1 TO 40: PRINT "*";: NEXT 
  701. 7030  VTAB 6:X$ = "THE NIBBLE BROKER": INVERSE : GOSUB 4890: NORMAL : PRINT : PRINT : PRINT :X$ = "BY": GOSUB 4890: PRINT :X$ = "MARK R. CRAVEN": GOSUB 4890: PRINT : PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
  702. 7040  PRINT : FOR I = 1 TO 40: PRINT "*";: NEXT : VTAB 22: PRINT "HIT ANY KEY TO CONTINUE  ";: GET X$: PRINT : RETURN 
  703. 7050  REM  *************
  704. 7060  REM  *           *
  705. 7070  REM  * SELL LESS *
  706. 7080  REM  *THAN BOUGHT*
  707. 7090  REM  *           *
  708. 7100  REM  *************
  709. 7110  HOME : PRINT "SELL LESS THAN AMOUNT BOUGHT?": PRINT : PRINT "IS THIS CORRECT? (Y/N) ";: GET Y$: POKE  -16368,0: IF Y$ < >"Y"  THEN  PRINT  CHR$(13): VTAB  PEEK(37) -3: CALL  -958: RETURN 
  710. 7120  TEXT : HOME 
  711. 7130  VTAB 6: PRINT "THIS REQUIRES THAT ANOTHER STOCK RECORD": PRINT "BE OPENED.  PLEASE ENTER NEW STOCK NAME"
  712. 7140  PRINT "OR PRESS <RETURN> AND 'THE  NIBBLE": PRINT "BROKER' WILL MAKE A NEW ONE FROM THE": PRINT "EXISTING ONE BY APPENDING A '*' TO": PRINT "THE OLD NAME.": PRINT 
  713. 7150  PRINT "YOU MAY LATER RETURN TO EDIT THE NAME": PRINT "TO ANOTHER NAME IF YOU DESIRE"
  714. 7160  VTAB 15: HTAB 4: PRINT "NEW NAME (OR <RTN> ";: CALL  -958: INPUT NS$
  715. 7170  IF NS$ = ""  THEN NS$ = ST$(I) +"*": PRINT : PRINT 
  716. 7180  FOR K = 1 TO E
  717. 7190  IF  LEFT$(NS$, LEN(NS$)) =  LEFT$(ST$(K), LEN(NS$))  THEN  PRINT "DUPLICATE NAME--PLEASE RE-ENTER": FOR J = 1 TO 1000: NEXT J: GOTO 7160
  718. 7200  NEXT K: GOTO 7230
  719. 7210  REM 
  720. 7220  REM 
  721. 7230  VTAB 20: PRINT "NEW NAME IS ";: INVERSE : PRINT NS$: NORMAL 
  722. 7240  FOR K = 1 TO 1000: NEXT K
  723. 7250 E = E +1:ED = 1
  724. 7260 ST$(E) = NS$
  725. 7270 B$(E) = B$(I)
  726. 7280 SN$(E) = SN$(I)
  727. 7290 BC$(E) =  STR$( INT(100 *((( VAL(SN$(E))/ VAL(BN$(I))) * VAL(BC$(I)))))/100)
  728. 7300 DB$(E) = DB$(I)
  729. 7310 BN$(E) = SN$(I)
  730. 7320 DS$(E) = DS$(I)
  731. 7330 SC$(E) = SC$(I)
  732. 7340 BN$(I) =  STR$( VAL(BN$(I)) - VAL(SN$(E)))
  733. 7350 DS$(I) = "00/00/00"
  734. 7360 SC$(I) = "0.00"
  735. 7370 SN$(I) = "0":BC$(I) =  STR$( VAL(BC$(I)) - VAL(BC$(E)))
  736. 7380 S$(I) = "0.00"
  737. 7390  HOME : VTAB 4: PRINT "PURCHASE PRICE WAS ";B$(I)
  738. 7400  VTAB 6: INPUT "NEW SELLING PRICE ";S$(E)
  739. 7410  IF  LEN(S$(E)) <1  THEN  CALL 65338: PRINT "YOU ";: INVERSE : PRINT "MUST";: NORMAL : PRINT " ENTER A VALUE": FOR K = 1 TO 1000: NEXT K: GOTO 7400
  740. 7420  FOR K = 1 TO  LEN(S$(E)): IF  ASC( MID$ (S$(E),K,1)) <46  OR  ASC( MID$ (S$(E),K,1)) >57  THEN  CALL 65338: PRINT " ENTER A PROPER NUMBER": GOTO 7400
  741. 7430  NEXT K
  742. 7440  POP : GOTO 2520
  743. 7450  REM  ********************
  744. 7460  REM  * INITIALIZE FILES *
  745. 7470  REM  ********************
  746. 7480  HOME : PRINT "THE FILES 'STOCKFILE' AND 'IRA.FILE'    WERE NOT FOUND ON THIS DISK."
  747. 7490  PRINT : PRINT "DO YOU WISH TO CREATE THESE FILES? (Y/N)": GET K$
  748. 7500  IF K$ = "N"  THEN FL$ = "": GOTO 320
  749. 7510  IF K$ = "Y"  THEN 7530
  750. 7520  GOTO 7480
  751. 7530  PRINT : FOR I = 1 TO 2: READ F$(I): NEXT I
  752. 7540  FOR I = 1 TO 2
  753. 7550  PRINT D$;"OPEN ";F$(I)
  754. 7560  PRINT D$;"WRITE ";F$(I)
  755. 7570  PRINT 0
  756. 7580  FOR J = 1 TO 9
  757. 7590  PRINT " "
  758. 7600  NEXT J
  759. 7610  PRINT D$;"CLOSE ";F$(I)
  760. 7620  NEXT I
  761. 7630 FL$ = "": GOTO 320
  762. 7640  DATA  "STOCKFILE","IRA.FILE"